home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
MATHS
/
PARI
/
PARI2
/
pari
/
other
/
plot_sun
< prev
next >
Wrap
Text File
|
1991-05-13
|
6KB
|
181 lines
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/* */
/* PLOT EN HAUTE RESOLUTION */
/* */
/* copyright Babe Cool */
/* */
/* */
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
# include "genpari.h"
#include <suntool/sunview.h>
#include <suntool/canvas.h>
#include <suntool/textsw.h>
#include <suntool/panel.h>
GEN ploth(ep,a,b,ch)
entree *ep;
GEN a,b;
char *ch;
#define ISCR 1120 /* 1400 en haute resolution */
#define JSCR 800 /* 1120 en haute resolution */
#define DECI 100 /* 140 en haute resolution */
#define DECJ 50 /* 70 en haute resolution */
{
long av,av2,jz,j,j1,i,sig,is,is2,js,js2;
GEN p1,p2,ysml,ybig,x,diff,dyj,dx,y[ISCR+1];
char c1[20];
char *c2;
Frame ecran;
Canvas canevas;
Pixwin *pw;
Pixfont *font;
ecran=window_create(NULL,FRAME,FRAME_LABEL,"ploth",
WIN_ERROR_MSG,"you must be in suntools",0);
canevas=window_create(ecran,CANVAS,WIN_HEIGHT,JSCR,
WIN_WIDTH,ISCR,0);
window_fit(ecran);pw=canvas_pixwin(canevas);
is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
pw_vector(pw,DECI,DECJ,DECI,js,PIX_SRC,1);
pw_vector(pw,DECI,DECJ,is,DECJ,PIX_SRC,1);
pw_vector(pw,is,DECJ,is,js,PIX_SRC,1);
pw_vector(pw,DECI,js,is,js,PIX_SRC,1);
sig=gcmp(b,a); if(!sig) return gnil;
av=avma;
if(sig<0) {x=a;a=b;b=x;}
for(i=1;i<=is2;i++) y[i]=cgetr(3);
newvalue(ep,cgetr(3)); x=(GEN)ep->value; gaffect(a,x);
dx=gdivgs(gsub(b,a),is2-1);ysml=gzero;ybig=gzero;
av2=avma;
for(i=1;i<=is2;i++)
{
gaffect(lisexpr(ch),y[i]);
if(gcmp(y[i],ysml)<0) ysml=y[i];
if(gcmp(y[i],ybig)>0) ybig=y[i];
gaddz(x,dx,x);avma=av2;
}
diff=gsub(ybig,ysml);
if(gcmp0(diff)) {ybig=gaddsg(1,ybig);diff=gun;}
dyj=gdivsg(js2-1,diff);jz=js+itos(ground(gmul(ysml,dyj)));
pw_vector(pw,DECI,jz,is,jz,PIX_SRC,1);
if(gsigne(a)*gsigne(b)<0)
{
jz=1-itos(ground(gdiv(a,dx)))+DECI;
pw_vector(pw,jz,DECJ,jz,js,PIX_SRC,1);
}
av2=avma;
for(i=1;i<=is2;i++)
{
j1=js-itos(ground(gmul(gsub(y[i],ysml),dyj)));
if(i==1) j=j1;
else
{
pw_vector(pw,i-2+DECI,j,i-1+DECI,j1,PIX_SRC,1);j=j1;
}
avma=av2;
}
font=pw_pfsysopen();
p1=cgetr(4);gaffect(ysml,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,-4+9*i,js,PIX_SRC,font,c2[i]);
gaffect(ybig,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,-4+9*i,DECJ,PIX_SRC,font,c2[i]);
gaffect(a,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,DECI-45+9*i,js+20,PIX_SRC,font,c2[i]);
gaffect(b,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,is-45+9*i,js+20,PIX_SRC,font,c2[i]);
avma = av;
window_main_loop(ecran);
killvalue(ep);
return gnil;
}
GEN ploth2(ep,a,b,ch)
entree *ep;
GEN a,b;
char *ch;
#define ISCR 1120 /* 1400 en haute resolution */
#define JSCR 800 /* 1120 en haute resolution */
#define DECI 100 /* 140 en haute resolution */
#define DECJ 50 /* 70 en haute resolution */
{
long av,av2,jz,iz,k1,k,j,j1,i,sig,is,is2,js,js2;
GEN p1,p2,ysml,ybig,xsml,xbig,diffx,diffy,dxj,t,dyj,dt,y[ISCR+1],x[ISCR+1];
char c1[20];
char *c2;
Frame ecran;
Canvas canevas;
Pixwin *pw;
Pixfont *font;
ecran=window_create(NULL,FRAME,FRAME_LABEL,"ploth",
WIN_ERROR_MSG,"you must be in suntools",0);
canevas=window_create(ecran,CANVAS,WIN_HEIGHT,JSCR,
WIN_WIDTH,ISCR,0);
window_fit(ecran);pw=canvas_pixwin(canevas);
is=ISCR-DECI;js=JSCR-DECJ;is2=is-DECI;js2=js-DECJ;
pw_vector(pw,DECI,DECJ,DECI,js,PIX_SRC,1);
pw_vector(pw,DECI,DECJ,is,DECJ,PIX_SRC,1);
pw_vector(pw,is,DECJ,is,js,PIX_SRC,1);
pw_vector(pw,DECI,js,is,js,PIX_SRC,1);
sig=gcmp(b,a); if(!sig) return gnil;
av=avma;
if(sig<0) {p1=a;a=b;b=p1;}
for(i=1;i<=is2;i++) {x[i]=cgetr(3);y[i]=cgetr(3);}
newvalue(ep,cgetr(3)); t=(GEN)ep->value; gaffect(a,t);
dt=gdivgs(gsub(b,a),is2-1);ysml=ybig=xsml=xbig=gzero;
av2=avma;
for(i=1;i<=is2;i++)
{
p1=lisexpr(ch);gaffect(p1[1],x[i]);gaffect(p1[2],y[i]);
if(gcmp(y[i],ysml)<0) ysml=y[i];
if(gcmp(y[i],ybig)>0) ybig=y[i];
if(gcmp(x[i],xsml)<0) xsml=x[i];
if(gcmp(x[i],xbig)>0) xbig=x[i];
gaddz(t,dt,t);avma=av2;
}
diffy=gsub(ybig,ysml);
if(gcmp0(diffy)) {ybig=gaddsg(1,ybig);diffy=gun;}
diffx=gsub(xbig,xsml);
if(gcmp0(diffx)) {xbig=gaddsg(1,xbig);diffx=gun;}
dyj=gdivsg(js2-1,diffy);jz=js+itos(ground(gmul(ysml,dyj)));
dxj=gdivsg(is2-1,diffx);iz=DECI-itos(ground(gmul(xsml,dxj)));
if(gsigne(ysml)*gsigne(ybig)<0)
pw_vector(pw,DECI,jz,is,jz,PIX_SRC,1);
if(gsigne(xsml)*gsigne(xbig)<0)
pw_vector(pw,iz,DECJ,iz,js,PIX_SRC,1);
av2=avma;
for(i=1;i<=is2;i++)
{
j1=js-itos(ground(gmul(gsub(y[i],ysml),dyj)));
k1=DECI+itos(ground(gmul(gsub(x[i],xsml),dxj)));
if(i==1) {j=j1;k=k1;}
else
{
pw_vector(pw,k,j,k1,j1,PIX_SRC,1);j=j1;k=k1;
}
avma=av2;
}
font=pw_pfsysopen();
p1=cgetr(4);gaffect(ysml,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,-4+9*i,js,PIX_SRC,font,c2[i]);
gaffect(ybig,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,-4+9*i,DECJ,PIX_SRC,font,c2[i]);
gaffect(xsml,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,DECI-45+9*i,js+20,PIX_SRC,font,c2[i]);
gaffect(xbig,p1);c2=(char *)sprintf(c1," %9.3lf ",rtodbl(p1));
for(i=1;c2[i];i++) pw_char(pw,is-45+9*i,js+20,PIX_SRC,font,c2[i]);
avma = av;
window_main_loop(ecran);
killvalue(ep);
return gnil;
}